﻿unit prints;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ComCtrls, ExtCtrls, ComObj, Variants, EXCEL2000, Data, Grids,
  LMDPrinter, LMDCustomComponent, LMDCustomPrintTask, LMDLayoutRenderPrintTask,
  LMDControlPrintTasks;

 Const
        CSMprotName= 'form1.xls';
        ZvitPath   ='D:\PRINT\';
        PasportPath= ZvitPath + 'Pasport\';
        MaxQ = 3;

  Type TLZvitRec= record
        NL:byte;
        T1: Array [1..MaxQ] of double;
        T2: Array [1..MaxQ] of double;
        Tin: Array [1..MaxQ,1..NL] of double;
        Pbar: double;
        P1: Array [1..MaxQ] of double;
        P2: Array [1..MaxQ] of double;
        Pin:  Array [1..MaxQ,1..NL] of double;
        Delta: Array [1..MaxQ,1..NL] of double;
        VL:    Array [1..MaxQ,1..NL] of double;
        VLny:  Array [1..MaxQ,1..NL] of double;
        Veny:  Array [1..MaxQ] of double;
        Z1:   Array [1..MaxQ] of double;
        Z2:   Array [1..MaxQ] of double;
        Q:    Array [1..MaxQ] of double;
        Qz:   Array [1..MaxQ] of single;
        Dp:   Array [1..MaxQ,1..NL] of Integer;
        Typ:  Array [1..NL] of String;
        Rv:   Array [1..NL] of String;
        ZavN: Array [1..NL] of String;
        Vur:  Array [1..NL] of String;
        PK:   Array [1..NL] of double;
        CNT:  Array [1..MaxQ] of Integer;
        Dgms: Array [1..MaxQ] of double;
        Typorozmir:   String;
        ZvitFileName: string;
        Prudatnuj:  Array [1..MaxQ,1..NL] of boolean;
   end; {Rec}

type
  TPasportForm = class(TForm)
    PrnEdit: TRichEdit;
    PrnBtn: TButton;
    CancelBtn: TButton;
    SavePasportCBox: TCheckBox;
    Panel1: TPanel;
    OperatorEdit: TEdit;
    StaticText1: TStaticText;
    StaticText2: TStaticText;
    CSM_MANEdit: TEdit;
    PrudatniBox: TGroupBox;
    PrOutputBox: TCheckBox;
    NePrOutputBox: TCheckBox;
    ProtocolOutputBox: TRadioGroup;
    GroupBox1: TGroupBox;
    ExtZvitSaveBox: TCheckBox;
    ShortGrid: TStringGrid;
    ShortGridPrint: TLMDStringGridPrintTask;
    LMDPrinter1: TLMDPrinter;
    procedure OperatorEditKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure CancelBtnClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure PrnBtnClick(Sender: TObject);
    Procedure SaveZamirResuts;
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure FormShow(Sender: TObject);
    Procedure ProtOutput(Sender:TObject);

  private
    { Private declarations }
    DBtransOk: boolean;
    Procedure WriteCSMPasport(Lns:TStrings; L:byte);
    Procedure WriteALLCSMPasports(Lns:TStrings);
    Procedure DisplayExtZvit(Var Larr: array of boolean);
    Procedure DisplayShortZvit(Var Larr: array of boolean);
    Procedure WriteZvit(Var f:TextFile; L:byte);
    Function  GetZvitFileName: string;
    Procedure WriteGMS(Var f:TextFile);
    procedure ToExcel;
    procedure SetShortGrid;
    Procedure FillShortGrid;


  public
    { Public declarations }
    Procedure LZvitRecSet0;
    Procedure ShowPasportForm(Msg: string);
    Procedure PrepareNew;
    Procedure StoreZamirResults(qn: byte);
    Procedure DisplayCSMProt;
    Procedure SetDebugRec;

  end;

var
  PasportForm: TPasportForm;
  LZvitRec: TLZvitRec;

implementation

uses Inits;

{$R *.DFM}
Procedure TPasportForm.LZvitRecSet0;
Var
  i,j: byte;
begin
  With LZvitRec do
    begin
      for i:= 1 to MaxQ do
        begin
        T1[i]:= 0.0;
        T2[i]:= 0.0;
        P1[i]:= 0.0;
        P2[i]:= 0.0;
        Z1[i]:= 0.0;
        Z2[i]:= 0.0;
        Q[i]:= 0.0;
        Qz[i]:= 0.0;
        Veny[i]:= 0.0;
        CNT[i]:= 0;
        Dgms[i]:= 0.0;

       end; {for i}

      for i:= 1 to MaxQ do
        for j:= 1 to Data.NL do
         begin
           Tin[i,j]:= 0.0;
           Pin[i,j]:= 0.0;
           Delta[i,j]:= 0.0;
           VL[i,j]:= 0.0;
           VLny[i,j]:= 0.0;
           Dp[i,j]:= 0;
           Prudatnuj[i,j]:= true;
         end; {for j}

      for i:= 1 to NL do
        begin
          Typ[i]:= '';
          ZavN[i]:= '';
          Rv[i]:= '';
          Vur[i]:= '';
          PK[i]:= 0;
        end; {for i}

      Pbar:= 0.0;
      ZvitFileName:= '';
      Typorozmir:= '';
   end; {With Rec do}

end; {proc}

Procedure TPasportForm.PrepareNew;
begin
  LZvitRecSet0;
  LZvitRec.ZvitFileName:= GetZvitFileName;
end; {proc}

Function TPasportForm.GetZvitFileName: string;
begin
  result:='';
  result:= FormatDateTime('ddmmyy hh-mma/p',now);
  result:= ZvitPath + result;
end;{func}

procedure TPasportForm.FormCreate(Sender: TObject);
begin
  PrnEdit.Paragraph.LeftIndent:= 20 ;
{  OperatorEdit.Text:= Inits.Operator_i;
  CSM_ManEdit.Text:= Inits.CSM_Man_i;}
end;{proc}

procedure TPasportForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  If (Inits.CSM_Man_i<>CSM_ManEdit.Text) then Inits.SaveHumans('', CSM_MANEdit.Text);
 { if SavePasportCBox.Checked then
    PrnEdit.Lines.SaveToFile(PasportPath+ ExtractFileName(LZvitRec.ZvitFileName));  }
  CanClose:= true;
end; {proc}

Procedure TPasportForm.StoreZamirResults(qn: byte);
Var
  i, Li: byte;
begin
  With LZvitRec do
    begin
      NL:=            Data.NL;
      Veny[qn]:=      Lich.Vzr[qn,1]-Lich.Vzr[qn,2];
      Pbar:=          Lich.Pbar;
      Z1[qn]:=        Lich.Z[qn,1];
      Z2[qn]:=        Lich.Z[qn,2];
      Q[qn]:=         Lich.Qs[qn];
      for i:= 1 to MaxQ do
         begin
           CNT[i]:= Lich.CNT[i,2]-Lich.CNT[i,1];
           Dgms[i]:= Lich.Dgms[i];
           Qz[i]:= Data.Qz[Lich.Tr, i];
         end;

      T1[qn]:= Lich.Te[qn,1];
      T2[qn]:= Lich.Te[qn,2];
      P1[qn]:= Lich.Pe[qn,1];
      P2[qn]:= Lich.Pe[qn,2];
      LZvitRec.Typorozmir:= Gmas[Lich.Tr];
      For Li:= 1 to NL do
        begin
          VL[qn, Li]:=    Lich.VL[qn,Li];
          VLny[qn, Li]:=  Lich.VLny[qn,Li];
          Delta[qn, Li]:= Lich.Delta[qn,Li];
          if Lich.Enabled[Li] then
            begin
              if Delta[qn, Li] > DopyskPohibkiMax[qn] then
                begin
                  Lich.Prudatnuj[Li]:= false;
                  Prudatnuj[qn,Li]:= false;
                end;
              if Delta[qn, Li] < DopyskPohibkiMin[qn] then
                begin
                  Lich.Prudatnuj[Li]:= false;
                  Prudatnuj[qn,Li]:= false;
                end;
            end; {if Lich.Prudatnuj[Li]}
          Dp[qn, Li]:= Lich.DP[qn,Li];
          PK[Li]:=  Lich.Pok[qn,Li];
          Pin[qn, Li]:= Lich.PL[qn,Li];
          Tin[qn, Li]:= Lich.TL[qn,Li];
          Typ[Li]:=   Lich.Model[Li];
          ZavN[Li]:=  Lich.ZavN[Li];
          Rv[Li]:=    Lich.Rv[Li];
          Vur[Li]:=   Lich.Vur[Li];
        end; {for i to NumL}
    end; {with}
end; {proc}

Procedure TPasportForm.SaveZamirResuts;
Var f: TextFile;
    L: byte;
begin
  if LZvitRec.ZvitFileName = '' then
     LZvitRec.ZvitFileName:= GetZvitFileName;
  {$I-}
  AssignFile(F, LZvitRec.ZvitFileName+'.txt');
  Rewrite(F);
  {$I+}
  if  IOResult<>0 then
    begin
      MessageDlg('Помилка запису протоколу на диск.'+#13+
                                   'Відсутня папка '+LZvitRec.ZvitFileName, mtError, [mbCancel], 0);
      exit;
    end; {if}
  For L:= 1 to NL do
    if Lich.Enabled[L] then WriteZvit(F,L);
  if GMSenabled then WriteGMS(F);
  CloseFile(F);
end;{proc}

Procedure TPasportForm.ShowPasportForm(Msg: string);
begin
  DBtransOk:= false;
  Caption:= '   Паспорти на лічильники ' + Msg;
  CSM_MANEdit.Text:= inits.CSM_Man_i;
  PasportForm.ShowModal;
  //WriteALLCSMPasports(PrnEdit.Lines);
end; {proc}

procedure TPasportForm.FormShow(Sender: TObject);
begin
  PrOutputBox.Checked:= true;
  NePrOutputBox.Checked:= true;
  ProtOutput(nil);
end; {proc}

Procedure TPasportForm.ProtOutput(Sender: TObject);
Var
  WriteOk: array of boolean;
  Li: byte;
begin
  PrnEdit.Clear;
  Caption:= ProtocolOutputBox.Items.Strings[ProtocolOutputBox.ItemIndex];
  SetLength(WriteOk, Length(Lich.Prudatnuj));
  for Li :=1 to LZvitRec.NL do
    if Lich.Prudatnuj[Li] then WriteOk[Li-1]:= PrOutputBox.Checked
      else WriteOk[Li-1]:= NePrOutputBox.Checked;
  Case ProtocolOutputBox.ItemIndex of
    0:DisplayShortZvit(WriteOk);
    1:DisplayExtZvit(WriteOk);
    2:DisplayCSMProt;
    3:;
  end; {case}
end; {proc}

Procedure TPasportForm.DisplayShortZvit(Var Larr: array of boolean);
Var
  S: Array[0..2] of ShortString;
  MaxL, L, i: byte;
begin
  {LMDPrinter1.Header.Template.Text:= 'Результат вимірювання похибок лічильників газу '+LZvitRec.Typorozmir+#13+
                      DateToStr(Date);
  SetShortGrid;
  FillShortGrid;
  ShortGrid.Visible:= true;}
  MaxL:= High(Larr);
  PrnEdit.Lines.Add('  '+Inits.Ystanovka_i+'---- РЕЗУЛЬТАТИ ПОВIРКИ ПОБУТОВИХ ЛІЧИЛЬНИКІВ ГАЗУ----');
  for i:= 0 to MaxL do
    if Larr[i] then
      With LZvitRec, PrnEdit do
        begin
          L:= i + 1;
          Lines.Add('');
          Lines.Add('№ лічильника: '+ZavN[L]);
          Lines.Add('Типорозмір: '+Typorozmir+'      Дата повірки: '+ DateToStr(Date));
          Str(Q[1]:5:3, S[0]); Str(Delta[1,L]:3:2, S[1]);
          Lines.Add('Q1= '+S[0]+' м.куб/год'+'       б='+S[1]+'%');
          Str(Q[2]:5:3, S[0]); Str(Delta[2,L]:3:2, S[1]);
          Lines.Add('Q2= '+S[0]+' м.куб/год'+'       б='+S[1]+'%');
          Str(Q[3]:5:3, S[0]); Str(Delta[3,L]:3:2, S[1]);
          Lines.Add('Q3= '+S[0]+' м.куб/год'+'       б='+S[1]+'%');
        end; {with}

{   for i:= 0 to MaxL do
    if Larr[i] then
      With LZvitRec, PrnEdit do
        begin
          L:= i + 1;
          Str(Delta[1,L]:3:2, S[0]); Str(Delta[2,L]:3:2, S[1]); Str(Delta[3,L]:3:2, S[2]);
          Lines.Add(IntToStr(L)+'  '+Vur[L]+'  '+Typ[L]+'  '+ZavN[L]+'  '+Rv[L]+'   '+S[0]+'     '+ S[1]+'     '+ S[2]);
        end;{with}
{  With LZvitRec, PrnEdit do
    begin
      Str(Q[1]:4:2, S[0]); Str(Q[2]:4:2, S[1]); Str(Q[3]:5:3, S[2]);
      Lines.Add('   Фактична витрата, м3/год            '+S[0]+'      '+S[1]+'      '+S[2]);
    end;
  PrnEdit.Lines.Add('---------------------------------------------------------------------------');

{  With LZvitRec, PrnEdit do
  if Data.GMSenabled then
    begin
      Str(Dgms[1]:3:2, S[0]); Str(Dgms[2]:3:2, S[1]); Str(Dgms[3]:3:2, S[2]);
      Lines.Add('GMS: вiдносна похибка, %       '+S[0]+'     '+ S[1]+'     '+ S[2]);
    end;}
end; {proc}

Procedure TPasportForm.DisplayExtZvit(Var Larr: array of boolean);
Var
  S: Array[0..2] of ShortString;
  MaxL, L,i: byte;
begin
  ShortGrid.Visible:= false;
  MaxL:= High(Larr);
  for i:= 0 to MaxL do
    if Larr[i] then
      With LZvitRec, PrnEdit do
        Begin
         L:= i+1;
         Lines.Add('-----'+Inits.Ystanovka_i+'------- РЕЗУЛЬТАТИ ПОВIРКИ ---------------');
         Lines.Add(DateToStr(Date)+'  '+ TimeToStr(Time)+ '                      Qmax        02Qmax     Qmin');
         Lines.Add('-------------------------------------------------------------------');
         Str(Qz[1]:4:2, S[0]); Str(Qz[2]:4:2, S[1]); Str(Qz[3]:5:3, S[2]);
         Lines.Add('Задане значення витрати, м3/год         '+S[0]+'       '+S[1]+'       '+S[2]);
         Str(Q[1]:4:2, S[0]); Str(Q[2]:4:2, S[1]); Str(Q[3]:5:3, S[2]);
         Lines.Add('Фактична витрата, м3/год                '+S[0]+'       '+S[1]+'       '+S[2]);
         Str(Veny[1]:7:4 , S[0]); Str(Veny[2]:7:4 , S[1]); Str( Veny[3]:7:4, S[2]);
         Lines.Add('Об''єм, вiдтворений еталоном ЕТ(ст.у),л '+S[0]+'    '+S[1]+'   '+S[2]);
         Str(VL[1,L]:7:4 , S[0]); Str( VL[2,L]:7:4 , S[1]); Str(VL[3,L]:7:4 , S[2]);
         Lines.Add('Об''єм, вимiряний лiчильником, л        '+S[0]+'    '+S[1]+'   '+S[2]);
         Str(VLny[1,L]:7:4 , S[0]); Str(VLny[2,L]:7:4 , S[1]); Str(VLny[3,L]:7:4 , S[2]);
         Lines.Add('Об''єм, вимiряний лiчильником (ст.у), л '+S[0]+'    '+S[1]+'   '+S[2]);
         //     Write (f, 'Похибка по об''єму, %                   ', Dv[0,L]:2:2,'       ', Dv[1,L]:2:2,'      ', Dv[2+i,L]:2:2,Cr);
         //     Write (f, 'Атмосферний тиск  , Па                 ', Pb[0]:6:0,'     ', Pb[1]:6:0,'     ', Pb[2+i]:6:0,Cr);
         Str(P1[1]:7:3 , S[0]); Str(P1[2]:7:3 , S[1]); Str(P1[3]:7:3 , S[2]);
         Lines.Add('Абсолютний тиск у ЕТ (поч виміру), кПа  '+S[0]+'    '+S[1]+'    '+S[2]);
         Str(P2[1]:7:3 , S[0]); Str(P2[2]:7:3 , S[1]); Str(P2[3]:7:3 , S[2]);
         Lines.Add('Абсолютний тиск у ЕТ (кін виміру), кПа  '+S[0]+'    '+S[1]+'    '+S[2]);
         Str(Pin[1,L]:7:3 , S[0]); Str( Pin[2,L]:7:3, S[1]); Str(Pin[3,L]:7:3, S[2]);
         Lines.Add('Тиск на входi лiчильника, кПа           '+S[0]+'    '+S[1]+'    '+S[2]);
         Str(T1[1]:3:2 , S[0]); Str(T1[2]:3:2 , S[1]); Str(T1[3]:3:2 , S[2]);
         Lines.Add('Температура в ЕТ (поч виміру), град С   '+S[0]+'      '+S[1]+'      '+S[2]);
         Str(T2[1]:3:2 , S[0]); Str(T2[2]:3:2 , S[1]); Str(T2[3]:3:2 , S[2]);
         Lines.Add('Температура в ЕТ (кін виміру), град С   '+S[0]+'      '+S[1]+'      '+S[2]);
         Str(Tin[1,L]:3:2 , S[0]); Str(Tin[2,L]:3:2 , S[1]); Str( Tin[3,L]:3:2, S[2]);
         Lines.Add('Температуpa на входi лiч, град. C       '+S[0]+'      '+S[1]+'      '+S[2]);
         Str(Z1[1]:6:6 , S[0]); Str(Z1[2]:6:6 , S[1]); Str(Z1[3]:6:6 , S[2]);
         Lines.Add('Коефіцієнт ст повітря в ЕТ (поч виміру) '+S[0]+'   '+S[1]+'   '+S[2]);
         Str(Z2[1]:6:6 , S[0]); Str(Z2[2]:6:6 , S[1]); Str(Z2[3]:6:6 , S[2]);
         Lines.Add('Коефіцієнт ст повітря в ЕТ (кін виміру) '+S[0]+'   '+S[1]+'   '+S[2]);
         Str( Pbar:6:3, S[0]);
         Lines.Add('Атмосферний тиск, кПа '+S[0]);
         Str(DP[1,L] , S[0]); Str(DP[3,L] , S[2]);
         Lines.Add('Втрати тиску на лічильнику, Па          '+S[0]+'                  '+S[2]);           {  ', DpMVN[0, L]:4:0,'     ------    ', DpMVN[2+i, L]:4:0,Cr);}
         Lines.Add('-------------------------------------------------------------------');
         Lines.Add('Робоче місце '+IntToStr(L)+' Виробник:'+Vur[L]+' Тип '+Typ[L]+' '+Typorozmir+' Зав.№ '+ZavN[L]+' '+Rv[L]+'р.в.');
         Str(PK[L]:6:4, S[0]);
         Lines.Add('Показник лічильника, м3                 '+S[0]);
         Lines.Add('Дата повірки: '+ DateToStr(Date)+'  '+TimeToStr(Time));
         Lines.Add('-------------------------------------------------------------------');
         Str(Delta[1,L]:3:2 , S[0]); Str(Delta[2,L]:3:2 , S[1]); Str(Delta[3,L]:3:2 , S[2]);
         Lines.Add('Вiдносна похибка, %                     '+S[0]+'     '+S[1]+'     '+S[2]);
         Lines.Add('-------------------------------------------------------------------');
         Lines.Add('');
         Lines.Add('');
         if L=3 then Lines.Add('');
       end;{with}

{ With LZvitRec, PrnEdit do
  if Data.GMSenabled then
    begin
      Str(Dgms[1]:3:2, S[0]); Str(Dgms[2]:3:2, S[1]); Str(Dgms[3]:3:2, S[2]);
      Lines.Add('GMS: вiдносна похибка, %       '+S[0]+'     '+ S[1]+'     '+ S[2]);
    end;         }

end; {proc}

Procedure TPasportForm.DisplayCSMProt;
begin
  ShortGrid.Visible:= false;
{  PrepareNew;
  SetDebugRec;
  StoreZamirResults(1);}
  ToExcel;
end; {proc}

Procedure TPasportForm.WriteALLCSMPasports(Lns:TStrings);
Var
  Li: byte;
begin
  For Li:= 1 to High(Lich.Prudatnuj) do
    if Lich.Prudatnuj[Li] then WriteCSMPasport(PrnEdit.Lines, Li);
end; {proc}

Procedure TPasportForm.WriteZvit(Var f:TextFile; L:byte);
Const
  Cr= #13 + #10;
Var
  i: byte;

begin
   With LZvitRec do begin
//     Write (F, '                                        -РЕЗУЛЬТАТИ ПОВIРКИ -              ', Cr);
     Write (f, '-----',Inits.Ystanovka_i,'------- РЕЗУЛЬТАТИ ПОВIРКИ ---------------', Cr);
     Write (f, DateToStr(Date),'  ', TimeToStr(Time), '                      Qmax        02Qmax        Qmin',Cr);
     Write (f, '-------------------------------------------------------------------', Cr);
     Write (f, 'Задане значення витрати, м3/год         ', Qz[1]:4:2,'       ',Qz[2]:4:2,'       ',Qz[3]:5:3, Cr);
     Write (f, 'Фактична витрата, м3/год                ', Q[1]:4:2,'       ', Q[2]:4:2,'       ', Q[3]:5:3, Cr);
     Write (f, 'Об''єм, вiдтворений еталоном ЕТ(ст.у),л ',Veny[1]:7:4, '    ', Veny[2]:7:4, '   ', Veny[3]:7:4, Cr);
     Write (f, 'Об''єм, вимiряний лiчильником, л        ',VL[1,L]:7:4,'    ', VL[2,L]:7:4,'   ', VL[3,L]:7:4, Cr);
     Write (f, 'Об''єм, вимiряний лiчильником (ст.у), л ',VLny[1,L]:7:4,'    ', VLny[2,L]:7:4,'   ',VLny[3,L]:7:4, Cr);
//     Write (f, 'Похибка по об''єму, %                   ', Dv[0,L]:2:2,'       ', Dv[1,L]:2:2,'      ', Dv[2+i,L]:2:2,Cr);
//     Write (f, 'Атмосферний тиск  , Па                 ', Pb[0]:6:0,'     ', Pb[1]:6:0,'     ', Pb[2+i]:6:0,Cr);
     Write (f, 'Абсолютний тиск у ЕТ (поч виміру), кПа  ',P1[1]:7:3,'    ', P1[2]:7:3,'    ', P1[3]:7:3,Cr);
     Write (f, 'Абсолютний тиск у ЕТ (кін виміру), кПа  ',P2[1]:7:3,'    ', P2[2]:7:3,'    ', P2[3]:7:3,Cr);
     Write (f, 'Тиск на входi лiчильника, кПа           ',Pin[1,L]:7:3,'    ',Pin[2,L]:7:3,'    ',Pin[3,L]:7:3,Cr);
     Write (f, 'Температура в ЕТ (поч виміру), град С   ',T1[1]:3:2, '      ', T1[2]:3:2,'      ', T1[3]:3:2, Cr);
     Write (f, 'Температура в ЕТ (кін виміру), град С   ',T2[1]:3:2, '      ', T2[2]:3:2,'      ', T2[3]:3:2, Cr);
     Write (f, 'Температуpa на входi лiч, град. C       ',Tin[1,L]:3:2,'      ',Tin[2,L]:3:2,'      ',Tin[3,L]:3:2, Cr);
     Write (f, 'Коефіцієнт ст повітря в ЕТ (поч виміру) ',Z1[1]:6:6, '   ', Z1[2]:6:6,'   ', Z1[3]:6:6, Cr);
     Write (f, 'Коефіцієнт ст повітря в ЕТ (кін виміру) ',Z2[1]:6:6, '   ', Z2[2]:6:6,'   ', Z2[3]:6:6, Cr);
     Write (f, 'Атмосферний тиск, кПа ',Pbar:6:3, Cr);
     Write (f, 'Втрати тиску на лічильнику, Па          ',DP[1,L], '                  ', DP[3,L],  Cr);           {  ', DpMVN[0, L]:4:0,'     ------    ', DpMVN[2+i, L]:4:0,Cr);}
     Write (f, '-------------------------------------------------------------------', Cr);
     Write (f, 'Робоче місце ', L, ' Виробник:',Vur[L], ' Тип ', Typ[L], ' ', Typorozmir, ' Зав.№ ', ZavN[L], '  ', Rv[L] ,'р.в.', Cr);
     Write (f, 'Показник лічильника, м3                 ',PK[L]:6:4, Cr);
     Write (f, 'Дата повірки: ', DateToStr(Date),'  ', TimeToStr(Time), Cr);
     Write (f, '-------------------------------------------------------------------', Cr);
     Write (f, 'Вiдносна похибка, %                     ',Delta[1,L]:3:2,'     ', Delta[2,L]:3:2,'     ', Delta[3,L]:3:2,Cr);
     Write (f, '-------------------------------------------------------------------', Cr);
     Write (f, cr);
   end;{with}
end; {proc}

Procedure TPasportForm.WriteGMS(Var f:TextFile);
Const
  Cr= #13 + #10;
begin
   With LZvitRec do
     Write (f, 'Вiдносна похибка GMS, %                 ',Dgms[1]:3:2,'     ', Dgms[2]:3:2,'     ', Dgms[3]:3:2,Cr);
end;{proc}

Procedure TPasportForm.WriteCSMPasport(Lns:TStrings; L:byte);
begin
  With LZvitRec do begin
     Lns.Add( '                                  ПАСПОРТ № _______                 ');
     Lns.Add( 'на побутовий лічильник газу ' + Vur[L] + ' '+Typ[L]+' ' + Typorozmir + '  Зав.  № ' + ZavN[L] +  '   '+ Rv[L]+' р.в.');
     Lns.Add( 'який за результатами повірки на робочому еталоні ' + Inits.Ystanovka_i +
              ' вважається придатним до застосування згідно РД-50-071.');
     Lns.Add( 'Дата повірки:  ' + DateToStr(Date));
     Lns.Add( ' ');
     Lns.Add( 'Повірку провів: '+ OperatorEdit.Text+ '            Представник ДЦСМС: '+ CSM_MANEdit.Text);
     Lns.Add( ' ');
     Lns.Add( '---------------------------------------------------------------------------------------------------');
     Lns.Add( ' ');
     Lns.Add( ' ');
  end; {with}
end; {proc}

procedure TPasportForm.OperatorEditKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key=Ord(#13) then
    Begin
      PrnEdit.Clear;
      WriteAllCSMPasports(PrnEdit.Lines);
    end; {if}
end; {Proc}

procedure TPasportForm.CancelBtnClick(Sender: TObject);
begin
  Close;
end; {proc}

procedure TPasportForm.PrnBtnClick(Sender: TObject);
begin
  {if ProtocolOutputBox.ItemIndex=0 then
    begin
      ShortGridPrint.PreparePages;
      try
        ShortGridPrint.ExecPrintPreviewDlg;
      finally
        ShortGridPrint.FinalizePages;
      end;
      exit;
    end; {if 0}
 // if ProtocolOutputBox.ItemIndex=1 then
 PrnEdit.Print('Протокол повірки лічильників газу');
end; {proc}

procedure TPasportForm.ToExcel;
var
  Excel, Sheet: OLEVariant;
  f: string;
  p,q,i:byte;
begin
  Excel:= CreateOleObject('Excel.Application');
  Excel.Visible := False;
  f:= ExtractFilePath(Application.ExeName)+ CSMprotName;
  Excel.Workbooks.Open(f, false, false);
  Sheet:= Excel.Workbooks[1].WorkSheets[1];
  for i := 1 to NL do
    if Lich.Enabled[i] then
      begin
        if frac(i/2)=0 then p:= 5 else p:= 0;
        if i in [1,3,5] then Sheet:= Excel.Workbooks[1].WorkSheets[(i div 2)+1];
        Sheet.Cells[3, 4+p].Value := DateToStr(Date);
        Sheet.Cells[5, 1+p].Value := LZvitRec.ZavN[i];
        Sheet.Cells[5, 2+p].Value := LZvitRec.Typorozmir;
        Sheet.Cells[5, 3+p].Value := LZvitRec.Typ[i] ;
        Sheet.Cells[5, 4+p].Value := LZvitRec.Vur[i];
        Sheet.Cells[14, 2+p].Value := LZvitRec.Dp[1,i];
        Sheet.Cells[15, 2+p].Value := LZvitRec.Dp[3,i];
        Sheet.Cells[31, 3+p].Value := Format('%6.2f',[LZvitRec.Tin[3,6]]);
        Sheet.Cells[34, 2+p].Value := Format('%6.3f',[LZvitRec.Pbar]);
        Sheet.Cells[36, 2+p].Value := CSM_MANEdit.Text;
        for q := 1 to 3 do
          begin
            Sheet.Cells[18, 1+q+p].Value := Format('%6.3f',[LZvitRec.Qz[q]]);
            Sheet.Cells[19, 1+q+p].Value := Format('%6.3f',[LZvitRec.Q[q]]);
            Sheet.Cells[20, 1+q+p].Value := Format('%6.3f',[LZvitRec.Veny[q]]);
            Sheet.Cells[21, 1+q+p].Value := Format('%6.3f',[LZvitRec.VL[q,i]]);
            Sheet.Cells[22, 1+q+p].Value := Format('%6.3f',[LZvitRec.VLny[q,i]]);
            Sheet.Cells[23, 1+q+p].Value := Format('%6.3f',[LZvitRec.P1[q]]);
            Sheet.Cells[24, 1+q+p].Value := Format('%6.3f',[LZvitRec.P2[q]]);
            Sheet.Cells[25, 1+q+p].Value := Format('%6.2f',[LZvitRec.Tin[q,i]]);
            Sheet.Cells[26, 1+q+p].Value := Format('%6.3f',[LZvitRec.Z1[q]]);
            Sheet.Cells[27, 1+q+p].Value := Format('%6.3f',[LZvitRec.Z2[q]]);
            Sheet.Cells[28, 1+q+p].Value := Format('%6.2f',[LZvitRec.Delta[q,i]]);
            Sheet.Cells[29, 1+q+p].Value := PrMas[byte(LZvitRec.Prudatnuj[q,i])];
          end;
      end; {if}
  Excel.Workbooks[1].SaveAs(LZvitRec.ZvitFileName+'.xls');
  Excel.Visible := True;
  Excel.UserControl := True;
  Excel := Unassigned;
  Sheet := Unassigned;
end; {proc}

Procedure TPasportForm.SetDebugRec;
Var
  i:byte;
begin
    with LZvitRec do
      begin
        NL:= 6;
        T1[1]:= 17.366;
        T2[1]:= 29.5456;
        Tin[1,1]:= 18.33454;
        Pbar:= 98.845645;

        P1[1]:= 600.63474;
        P2[1]:= 454.3436;

        Pin[1,1]:= 103.56367123;

        Delta[1,1]:= -2.2354;
        VL[1,1]:= 200.3;
        VLny[1,1]:= 201.5;
        Veny[1]:= 199;

        Z1[1]:= 0.96;
        Z2[1]:=0.97;

        Q[1]:= 9.8;
        Qz[1]:=10;
        Dp[1,1]:= 288;

        Typ[1]:= '6G6';
        Rv[1]:= '2006';
        ZavN[1]:= '26263';
        Vur[1]:='Metix';
        PK[1]:=65.535;
        CNT[1]:= 53;
        Dgms[1]:= 2.2;
        Typorozmir:='G6';
     end; {Rec}
   For i:= 1 to NL do
      Lich.Enabled[i]:= true;
end; {proc}

procedure TPasportForm.SetShortGrid;
Var
  i: byte;
begin
  With ShortGrid do
  begin
    For i := 1 to NL do
    begin
      Cells[0, i] := IntToStr(i);
      Cells[1, i] := '';
      Cells[2, i] := '';
      Cells[3, i] := '';
      Cells[4, i] := '';
      Cells[5, i] := '';
      Cells[6, i] := '';
      Cells[7, i] := '';
    end; { for i }
    Cells[0, 0] := '№';
    Cells[1, 0] := 'Заводський №';
    Cells[2, 0] := 'Рік'+#13+'випуску';
    Cells[3, 0] := 'Тип';
    Cells[4, 0] := 'Виробник';
    Cells[5, 0] := 'Qmax';
    Cells[6, 0] := '0,2Qmax';
    Cells[7, 0] := 'Qmin';
    Cells[1, 7] := 'Витрата';
  end; { with }
end; { proc }

Procedure TPasportForm.FillShortGrid;
Var
  i: byte;
begin
  For i:= 1 to NL do
    if Lich.Enabled[i] then
      begin
        ShortGrid.Cells[0,i]:= IntToStr(i);
        ShortGrid.Cells[1,i]:= LZvitRec.ZavN[i];
        ShortGrid.Cells[2,i]:= LZvitRec.Rv[i];
        ShortGrid.Cells[3,i]:= LZvitRec.Typ[i];
        ShortGrid.Cells[4,i]:= LZvitRec.Vur[i];
        ShortGrid.Cells[5,i]:= FloatToStrF(LZvitRec.Delta[1,i], ffNumber, 6,2);
        ShortGrid.Cells[6,i]:= FloatToStrF(LZvitRec.Delta[2,i], ffNumber, 6,2);
        ShortGrid.Cells[7,i]:= FloatToStrF(LZvitRec.Delta[3,i], ffNumber, 6,2);
    end; {for}
 ShortGrid.Cells[5,7]:= FloatToStrF(LZvitRec.Q[1], ffNumber, 6,2);
 ShortGrid.Cells[6,7]:= FloatToStrF(LZvitRec.Q[2], ffNumber, 6,2);
 ShortGrid.Cells[7,7]:= FloatToStrF(LZvitRec.Q[3], ffNumber, 6,3);
end; {proc}

end.
